﻿Public Class ActualizarOrdenServicioVendedor

    Private Sub ActualizarOrdenServicioVendedor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'ToolStripStatusLabel1.Text = "Ingrese el No. de Orden, para verificar su existencia"
        LimpiaFormulario()
        CargaEstadosOC()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Me.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        ConsultarOrdenServicio.ShowDialog()
    End Sub

    Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click
        Dim businessOS As New businessOS()
        Dim OS As New clsOrden_Servicio()
        Dim ListaOS As New List(Of clsOrden_Servicio)
        Dim NroOS As Int32
        Dim FecDesde As Date
        Dim FecHasta As Date
        Try
            If txtNroOS.Text.Trim.Length > 0 Then
                NroOS = Convert.ToInt32(txtNroOS.Text.Trim)
            Else
                NroOS = 0
            End If
            If ValidaFecha() = False Then
                Exit Sub
            End If


            FecDesde = dtpFecDesde.Value
            FecHasta = dtpFecHasta.Value

            ListaOS = businessOS.TraeOrdenesServicioVendedor(NroOS, FecDesde, FecHasta)

            If ListaOS.Count = 0 Then
                MessageBox.Show("No se encontraron ordenes de servicio con los parametros especificados", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            ElseIf ListaOS.Count = 1 Then
                OS = ListaOS.Item(0)
                AsignaCampo(OS)
            Else
                TraeConsulta(ListaOS)
            End If
        Catch ex As Exception
        Finally
            businessOS.Dispose()
            OS.Dispose()
        End Try
    End Sub

    Private Sub btnLimpiaForm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiaForm.Click
        LimpiaFormulario()

    End Sub
    Private Sub LimpiaFormulario()
        txtNroOS.Text = ""
        dtpFecDesde.Value = Now.Date
        dtpFecDesde.MaxDate = Now.Date
        txtDetalle.Text = ""
        dtpFecHasta.Value = Now.Date
        dtpFecHasta.MaxDate = Now.Date
        txtMonto.Text = ""
        txtObservacion.Text = ""

        txtMonto.Enabled = False
        txtNroOS.Enabled = True
        dtpFecDesde.Enabled = True
        dtpFecHasta.Enabled = True
        txtDetalle.Enabled = False

    End Sub
    Public Sub AsignaCampo(ByVal OS As clsOrden_Servicio)
        txtNroOS.Text = OS.Os_Id.ToString.Trim
        txtDetalle.Text = OS.Detalle.Item(0).Descri
        If OS.Os_Importe > 0 Then
            txtMonto.Text = OS.Os_Importe.ToString.Trim
        End If
        txtNroOS.Enabled = False
        dtpFecDesde.Enabled = False
        dtpFecHasta.Enabled = False
        txtDetalle.Enabled = False

    End Sub
    Private Sub TraeConsulta(ByVal ListaOS As List(Of clsOrden_Servicio))
        Me.Enabled = False
        ConsultarOrdenServicio.ModoAcceso = "MODI OS VEDEDOR"
        ConsultarOrdenServicio.FormatoGrilla()
        ConsultarOrdenServicio.CargaGrilla(ListaOS)
        ConsultarOrdenServicio.MdiParent = Me.MdiParent
        ConsultarOrdenServicio.Show()
    End Sub
    Private Sub CargaEstadosOC()
        Dim ListaEstadosOc As New List(Of clsEstado_Os)
        Dim EstadoOCDao As New daoEstado_Os()
        ListaEstadosOc = EstadoOCDao.TraeEstadosOrdenServicioVendedor()
        EstadoOCDao.Dispose()
        cmbEstadoOC.DataSource = ListaEstadosOc
        cmbEstadoOC.ValueMember = "EstadoOs_Id"
        cmbEstadoOC.DisplayMember = "EstadoOs_Desc"
        cmbEstadoOC.SelectedIndex = 0
    End Sub
    Private Function ValidaFecha() As Boolean
        If dtpFecDesde.Value > dtpFecHasta.Value Then
            MessageBox.Show("La fecha desde no puede ser mayor a la fecha Hasta", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            Return True
        End If
    End Function

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim OS As New clsOrden_Servicio()
        Dim OSDet As New clsOrden_Servicio_Detalle
        Dim EstadoOS As New clsEstado_Os()
        Dim BusinessOS As New businessOS()
        Dim OSDao As New daoOrden_Servicio()
        Dim EstadoOsDao As New daoEstado_Os()
        Dim OSDetDao As New daoOrden_Servicio_Detalle()
        Dim OsConsumDao As New daoOrden_Servicio_Consumos()
        Dim ProductoDao As New daoCatalogo()
        Dim ProductoBusiness As New businessCatalogo()

        Try
            ''Valido que sea una OS Valida
            If txtNroOS.Text.Trim.Length = 0 Then
                MessageBox.Show("Debe seleccionar una Orden de Servicio Validad para actualizar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
            OS = OSDao.TraeOrdenServicio(Convert.ToInt32(txtNroOS.Text.Trim))
            If OS.Os_Id = 0 Then
                MessageBox.Show("Debe seleccionar una Orden de Servicio Validad para actualizar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If


            ''VAlido que el cambio de estado sea valido
            EstadoOS = EstadoOsDao.TraeEstadoOrdenServicio(Convert.ToInt32(cmbEstadoOC.SelectedValue))
            If BusinessOS.ValidaCambioEstado(OS, EstadoOS) = False Then
                MessageBox.Show("El cambio de estado que intenta hacer no es valido.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If

            ''VAlido que el estado al que la quiero actualizar no sea el mismo que el actual
            EstadoOS = EstadoOsDao.TraeEstadoOrdenServicio(Convert.ToInt32(cmbEstadoOC.SelectedValue))
            If EstadoOS.EstadoOs_Id = 0 Then
                MessageBox.Show("No puede actualizar la orden de servicio al estado seleccionado.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If


            ''Actualizo el estado de la OS
            OS.Os_Estado = EstadoOS.EstadoOs_Id
            If OS.Os_Estado = 7 Then
                If txtMonto.Text.Trim.Length = 0 Then
                    MessageBox.Show("Debe ingresar el monto para poder poder actualizar la Orden de servicio al estado " & EstadoOS.EstadoOs_Desc.Trim.ToUpper, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                ElseIf Convert.ToDecimal(txtMonto.Text.Trim) = 0 Then
                    MessageBox.Show("Debe ingresar el monto para poder poder actualizar la Orden de servicio al estado " & EstadoOS.EstadoOs_Desc.Trim.ToUpper, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                End If
            End If
            If OSDao.Modificar(OS) Then
                ''Doy de alta el detalle
                Dim Observacion As String
                Observacion = txtObservacion.Text.Trim.ToUpper
                OSDet.Os_Id = OS.Os_Id
                OSDet.Osdte_Estado = EstadoOS.EstadoOs_Id
                OSDet.Descri = Observacion
                OSDet.Cod_Suc = Configuracion.Cod_Suc
                OSDet.Osdte_Id = Numerador.TraeProximo("ORDEN_SERVICIO_DETALLE")

                If OSDetDao.Alta(OSDet) Then
                    ConfirmaGuardadoExitoso()
                Else
                    MessageBox.Show("No se pudo generar el detalle de la actualisacion de OS. Comuniquese con Sistemas", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                End If

            Else
                MessageBox.Show("No se pudo actualizar la orden de servicio. Comuniquese con Sistemas", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
        Catch ex As Exception
        Finally
            OS.Dispose()
            OSDet.Dispose()
            EstadoOS.Dispose()
            BusinessOS.Dispose()
            OSDao.Dispose()
            EstadoOsDao.Dispose()
            OSDetDao.Dispose()
            ProductoBusiness.Dispose()
            ProductoDao.Dispose()
        End Try
    End Sub
    Private Sub ConfirmaGuardadoExitoso()
        MessageBox.Show("La actualización de la Orden se realizo correctamente.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        LimpiaFormulario()
    End Sub

    Private Sub cmbEstadoOC_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbEstadoOC.SelectedValueChanged
        Dim EstadoOS As New clsEstado_Os()
        Dim EstadoOsDao As New daoEstado_Os()
        If cmbEstadoOC.ValueMember.Trim.Length > 0 Then
            EstadoOS = EstadoOsDao.TraeEstadoOrdenServicio(Convert.ToInt32(cmbEstadoOC.SelectedValue))
            EstadoOsDao.Dispose()

            If EstadoOS.EstadoOs_Id = 7 Then
                txtMonto.Enabled = True
            Else
                txtMonto.Enabled = False
            End If
        End If

    End Sub

    Private Sub txtNroOS_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNroOS.KeyPress
        validarInt(e)
    End Sub

    Private Sub txtMonto_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtMonto.KeyPress
        validarDouble(e)
    End Sub

End Class
